#Boa:Dialog:Dialog1

import wx
import wx.grid
import utiles
import consultasBD
import Vista

GRIS = ( 220, 220, 220, 255)
NEGRO = ( 0, 0, 0, 255)
VERDENEGRO = ( 47, 79, 79, 255)
BLANCO = (255, 255, 255, 255)
ROJO = (255, 145, 145, 255)
VERDE = (145, 255, 145, 255)
AZUL = (145, 145, 255, 255)
AMARILLO = (254, 248, 191, 255)

def create(parent):
    return Dialog1(parent)

[wxID_DIALOG1, wxID_DIALOG1BUTTON1, wxID_DIALOG1BUTTON2, wxID_DIALOG1BUTTON3, 
 wxID_DIALOG1BUTTON4, wxID_DIALOG1BUTTON5, wxID_DIALOG1COMBOBOX1, 
 wxID_DIALOG1COMBOBOX2, wxID_DIALOG1DATEPICKERCTRL1, wxID_DIALOG1GRID1, 
 wxID_DIALOG1GRID2, wxID_DIALOG1STATICTEXT1, wxID_DIALOG1STATICTEXT2, 
 wxID_DIALOG1STATICTEXT3, wxID_DIALOG1STATICTEXT4, wxID_DIALOG1STATICTEXT5, 
 wxID_DIALOG1STATICTEXT6, wxID_DIALOG1TEXTCTRL1, wxID_DIALOG1TEXTCTRL2, 
] = [wx.NewId() for _init_ctrls in range(19)]

class Dialog1(wx.Dialog):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Dialog.__init__(self, id=wxID_DIALOG1, name='', parent=prnt,
              pos=wx.Point(157, 79), size=wx.Size(1139, 492),
              style=wx.DEFAULT_DIALOG_STYLE, title='Listado de Transferencias')
        self.SetClientSize(wx.Size(1131, 458))

        self.staticText1 = wx.StaticText(id=wxID_DIALOG1STATICTEXT1,
              label='Fecha', name='staticText1', parent=self, pos=wx.Point(8,
              8), size=wx.Size(29, 13), style=0)

        self.grid1 = wx.grid.Grid(id=wxID_DIALOG1GRID1, name='grid1',
              parent=self, pos=wx.Point(8, 40), size=wx.Size(400, 408),
              style=0)
        self.grid1.EnableEditing(False)
        self.grid1.Bind(wx.grid.EVT_GRID_CELL_LEFT_DCLICK,
              self.OnSeleccionarRenglon)

        self.staticText2 = wx.StaticText(id=wxID_DIALOG1STATICTEXT2, label='',
              name='staticText2', parent=self, pos=wx.Point(176, 8),
              size=wx.Size(0, 16), style=0)
        self.staticText2.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD,
              False, 'Tahoma'))

        self.datePickerCtrl1 = wx.DatePickerCtrl(id=wxID_DIALOG1DATEPICKERCTRL1,
              name='datePickerCtrl1', parent=self, pos=wx.Point(40, 8),
              size=wx.Size(88, 21), style=wx.DP_DROPDOWN | wx.DP_SHOWCENTURY)
        self.datePickerCtrl1.Enable(True)
        self.datePickerCtrl1.Bind(wx.EVT_DATE_CHANGED, self.OnCambiaFecha,
              id=wxID_DIALOG1DATEPICKERCTRL1)

        self.staticText3 = wx.StaticText(id=wxID_DIALOG1STATICTEXT3,
              label='Origen', name='staticText3', parent=self, pos=wx.Point(152,
              8), size=wx.Size(32, 13), style=0)

        self.comboBox1 = wx.ComboBox(choices=[], id=wxID_DIALOG1COMBOBOX1,
              name='comboBox1', parent=self, pos=wx.Point(192, 8),
              size=wx.Size(130, 21), style=0, value='')
        self.comboBox1.SetLabel('')
        self.comboBox1.Bind(wx.EVT_COMBOBOX, self.OnComboOrigen,
              id=wxID_DIALOG1COMBOBOX1)

        self.staticText4 = wx.StaticText(id=wxID_DIALOG1STATICTEXT4,
              label='Destino', name='staticText4', parent=self,
              pos=wx.Point(336, 8), size=wx.Size(36, 13), style=0)

        self.comboBox2 = wx.ComboBox(choices=[], id=wxID_DIALOG1COMBOBOX2,
              name='comboBox2', parent=self, pos=wx.Point(384, 8),
              size=wx.Size(130, 21), style=0, value='')
        self.comboBox2.SetLabel('')
        self.comboBox2.Bind(wx.EVT_COMBOBOX, self.OnComboDestino,
              id=wxID_DIALOG1COMBOBOX2)

        self.textCtrl1 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL1, name='textCtrl1',
              parent=self, pos=wx.Point(616, 8), size=wx.Size(64, 21), style=0,
              value='')

        self.button1 = wx.Button(id=wxID_DIALOG1BUTTON1, label='Buscar',
              name='button1', parent=self, pos=wx.Point(928, 8),
              size=wx.Size(59, 23), style=0)
        self.button1.Bind(wx.EVT_BUTTON, self.OnBuscar, id=wxID_DIALOG1BUTTON1)

        self.button2 = wx.Button(id=wxID_DIALOG1BUTTON2, label='Salir',
              name='button2', parent=self, pos=wx.Point(1056, 8),
              size=wx.Size(59, 23), style=0)
        self.button2.Bind(wx.EVT_BUTTON, self.OnSalir, id=wxID_DIALOG1BUTTON2)

        self.button4 = wx.Button(id=wxID_DIALOG1BUTTON4, label='INGRESO',
              name='button4', parent=self, pos=wx.Point(784, 8),
              size=wx.Size(56, 23), style=0)
        self.button4.Show(False)
        self.button4.Bind(wx.EVT_BUTTON, self.OnBotonIngreso,
              id=wxID_DIALOG1BUTTON4)

        self.textCtrl2 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL2, name='textCtrl2',
              parent=self, pos=wx.Point(712, 8), size=wx.Size(64, 21), style=0,
              value='')
        self.textCtrl2.Show(False)
        self.textCtrl2.Bind(wx.EVT_KILL_FOCUS, self.OnPTCkillFocus)

        self.grid2 = wx.grid.Grid(id=wxID_DIALOG1GRID2, name='grid2',
              parent=self, pos=wx.Point(416, 40), size=wx.Size(704, 408),
              style=0)
        self.grid2.EnableEditing(False)
        self.grid2.Bind(wx.grid.EVT_GRID_CELL_LEFT_DCLICK,
              self.OnSeleccionarRenglon2)

        self.button3 = wx.Button(id=wxID_DIALOG1BUTTON3, label='Limpiar',
              name='button3', parent=self, pos=wx.Point(992, 8),
              size=wx.Size(59, 23), style=0)
        self.button3.Bind(wx.EVT_BUTTON, self.OnBotonLimpiar,
              id=wxID_DIALOG1BUTTON3)

        self.staticText5 = wx.StaticText(id=wxID_DIALOG1STATICTEXT5,
              label='ID Transferencia', name='staticText5', parent=self,
              pos=wx.Point(528, 8), size=wx.Size(80, 13), style=0)

        self.staticText6 = wx.StaticText(id=wxID_DIALOG1STATICTEXT6,
              label='PTC', name='staticText6', parent=self, pos=wx.Point(688,
              8), size=wx.Size(19, 13), style=0)
        self.staticText6.Show(False)

        self.button5 = wx.Button(id=wxID_DIALOG1BUTTON5, label='ACEPTAR',
              name='button5', parent=self, pos=wx.Point(840, 8),
              size=wx.Size(64, 23), style=0)
        self.button5.Show(False)

    def __init__(self, parent):
        self._init_ctrls(parent)
        self.origen = -1
        self.destino = -1
        self.coloreado = 0
        self.coloreado2 = 0
        self.miFecha = ""
        #self.staticText5.Show(False)
        #self.textCtrl1.Show(False)
        self.cargarSucursal()
        self.OnCambiaFecha(None)
        self.crearGrilla()

    def cargarSucursal(self):
        sucursal = utiles.getSucursalActiva()
        SQL = "SELECT nombre FROM sucursales WHERE codsucursal='%s'" % (sucursal)
        resultado = consultasBD.ordenCrudaDict(SQL)
        self.comboBox1.SetLabel(resultado[0]['nombre'])
        SQL = "SELECT nombre FROM sucursales"
        resultado = consultasBD.ordenCrudaDict(SQL)
        for i,item in enumerate(resultado):
            self.comboBox1.Append(item["nombre"])
            self.comboBox2.Append(item["nombre"])
        self.OnComboOrigen(None)

    def crearGrilla(self):
        columnas = ['ID','Estado','Fecha','Cantidad\nitems']
        self.nroColumnas = len(columnas)
        self.grid1.CreateGrid(1, self.nroColumnas)
        for col in xrange(self.nroColumnas):
            self.grid1.SetColLabelValue(col,columnas[col])
        for col in xrange(self.nroColumnas):
            self.grid1.AutoSizeColumn(col,True)
            
        columnas2 = ['PTC','Codigo\nSussan','Descripcion','Talle','Color','Pecio','Cantidad','Recibido','X']
        self.nroColumnas2 = len(columnas2)
        self.grid2.CreateGrid(1, self.nroColumnas2)
        for col in xrange(self.nroColumnas2):
            self.grid2.SetColLabelValue(col,columnas2[col])
        for col in xrange(self.nroColumnas2):
            self.grid2.AutoSizeColumn(col,True)

    def obtenerNumeroItems(self,item):
        id = str(item['id'])
        consultaSQL = "SELECT sum(cant) FROM transferenciastieneproductos WHERE idtransferencia='"+id+"'"
        return str(consultasBD.ordenCruda(consultaSQL)[0][0])

    def OnSalir(self, event):
        print "Fin de recepcion"
        self.Close()

    def OnComboOrigen(self, event):
        nombreSucursal = self.comboBox1.GetLabel()
        sql = "SELECT codsucursal FROM sucursales WHERE nombre='"+nombreSucursal+"'"
        codigoSucursal = consultasBD.ordenCruda(sql)[0][0]
        self.textCtrl1.SetValue("")
        self.button1.SetFocus()
        print "Sucursal origen: ",codigoSucursal,nombreSucursal
        self.origen = codigoSucursal

    def OnComboDestino(self, event):
        nombreSucursal = self.comboBox2.GetLabel()
        sql = "SELECT codsucursal FROM sucursales WHERE nombre='"+nombreSucursal+"'"
        codigoSucursal = consultasBD.ordenCruda(sql)[0][0]
        self.textCtrl1.SetValue("")
        self.button1.SetFocus()
        print "Sucursal destino: ",codigoSucursal,nombreSucursal
        self.destino = codigoSucursal

    def OnCambiaFecha(self, event):
        fecha = str(self.datePickerCtrl1.GetValue()).split()[0]
        fecha = fecha[3:5]+"-"+fecha[0:2]+"-20"+fecha[-2:]
        self.miFecha = utiles.invertirFecha(fecha)
        self.textCtrl1.SetValue("")
        if self.grid1.GetNumberRows()>0:
            self.limpiarGrilla1
        if self.grid2.GetNumberRows()>0:
            self.limpiarGrilla2
        self.button1.SetFocus()
        print "Fecha procesada: ", self.miFecha

    def llenarGrilla(self,transferencias):
        renglon = 0
        for item in transferencias:
            id = str(item['id'])
            estado = str(item['estado'])
            if estado == '1':
                estado = "pendiente"
            else:
                estado = "recepcionada"
            fecha = str(item['fecha'])
            cantidad = self.obtenerNumeroItems(item)
            if cantidad == "None": cantidad = "0"
            self.grid1.SetCellValue(renglon, 0,id)
            self.grid1.SetCellValue(renglon, 1,estado)
            self.grid1.SetCellValue(renglon, 2,fecha)
            self.grid1.SetCellValue(renglon, 3,cantidad)
            self.grid1.SetCellAlignment(renglon, 3, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)

            #agrego un renglon vacio para proximo item a procesar
            self.grid1.AppendRows(1)
            renglon = renglon + 1
        self.grid1.DeleteRows(renglon)
        for col in xrange(self.nroColumnas):
            self.grid1.AutoSizeColumn(col,True)
        self.grid1.Refresh()
        return

    def OnBuscar(self, event):
        if self.button1.GetLabel() == "Imprimir":
            self.imprimir()
            return
        if self.textCtrl1.GetValue() != "":
            self.buscarPorCodigo()
            return
        print "Buscando"
        self.limpiarGrilla1()
        self.limpiarGrilla2()
        if self.origen < 0 or self.destino < 0 or self.origen == self.destino:
            texto = "Verifique las sucursales origen y destino.\n"
            texto+= "Debe especificarlas o ser Origen distinto a Destino."
            utiles.mensaje(None,texto)
            return
        r1 = "SELECT * FROM transferencias WHERE idsucorigen='"+self.origen+"' "
        r2 = "AND idsucdestino='"+self.destino+"' "
        r3 = "AND fecha LIKE '%"+self.miFecha+"%' ORDER BY fecha DESC"
        consultaSQL = r1 + r2 + r3
        resultado = consultasBD.ordenCrudaDict(consultaSQL)
        if resultado != ():
            self.llenarGrilla(resultado)

    def ponerColor(self,fila,color):
        for j in xrange(self.nroColumnas):
            self.grid1.SetCellBackgroundColour(fila,j,color)
        self.grid1.Refresh()

    def ponerColor2(self,fila,color):
        for j in xrange(self.nroColumnas2):
            self.grid2.SetCellBackgroundColour(fila,j,color)
        self.grid2.Refresh()

    def limpiarGrilla1(self):
        self.grid1.ClearGrid()
        totalfilas = self.grid1.GetNumberRows()
        for renglon in xrange(totalfilas,0,-1):
            self.grid1.DeleteRows(renglon-1)
        self.grid1.AppendRows(1)
        self.grid1.Refresh()

    def limpiarGrilla2(self):
        self.grid2.ClearGrid()
        totalfilas = self.grid2.GetNumberRows()
        for renglon in xrange(totalfilas,0,-1):
            self.grid2.DeleteRows(renglon-1)
        self.datePickerCtrl1.Enable(True)
        self.comboBox1.Enable(True)
        self.comboBox2.Enable(True)
        self.textCtrl1.Enable(True)
        self.staticText6.Show(False)
        self.textCtrl2.Show(False)
        self.button4.Show(False)
        self.button5.Show(False)
        self.button1.SetLabel("Buscar")
        self.grid2.Refresh()

    def OnSeleccionarRenglon(self, event):
        if self.grid1.GetCellValue(0, 0) != "":
            fil = self.grid1.GetGridCursorRow()
            col = self.grid1.GetGridCursorCol()
            if self.grid1.GetCellValue(fil, 0) != "":
                self.id = ""
                if self.grid1.GetCellBackgroundColour(fil,0) == GRIS:
                    #poner en blanco
                    self.limpiarGrilla2()
                    self.ponerColor(self.coloreado,BLANCO)
                    self.ponerColor(fil,BLANCO)
                    self.coloreado = fil
                    self.textCtrl1.SetValue("")
                else:
                    #poner en gris
                    self.limpiarGrilla2()
                    self.ponerColor(self.coloreado,BLANCO)
                    self.ponerColor(fil,GRIS)
                    self.coloreado = fil
                    self.id = self.grid1.GetCellValue(fil,0)
                    self.llenarGrilla2(self.id)
                    self.textCtrl1.SetValue(self.grid1.GetCellValue(fil,0))
        self.grid1.Refresh()
        self.grid2.Refresh()

    def obtenerProducto(self,ptc,cant):
        consultaSQL = "SELECT id,codsussan,talle,color FROM producto_talle_color WHERE id='"+ptc+"'"
        aux1= consultasBD.ordenCrudaDict(consultaSQL)
        codsussan = str(aux1[0]['codsussan'])
        consultaSQL = "SELECT codsussan,descri,preciolt1 FROM productos WHERE codsussan='"+codsussan+"'"
        aux2= consultasBD.ordenCrudaDict(consultaSQL)
        consultaSQL = "SELECT idcolor,nombre FROM colores WHERE idcolor='"+str(aux1[0]['color'])+"'"
        aux3= consultasBD.ordenCrudaDict(consultaSQL)
        sucursal = str(utiles.getSucursalActiva())
        return {'ptc':ptc,'codsussan':aux1[0]['codsussan'],'descri':aux2[0]['descri'],'talle':aux1[0]['talle'],'color':aux3[0]['nombre'],'precio':str(aux2[0]['preciolt1']),'cantidad':cant}

    def llenarGrilla2(self,id):
        #['PTC','Codigo\nSussan','Talle','Color','Descripcion','Cantidad']
        self.datePickerCtrl1.Enable(False)
        self.comboBox1.Enable(False)
        self.comboBox2.Enable(False)
        self.textCtrl1.Enable(False)
        self.staticText6.Show(True)
        self.textCtrl2.Show(True)
        self.textCtrl2.SetFocus()
        self.button4.Show(True)
        self.button5.Show(True)
        self.button1.SetLabel("Imprimir")
        consultaSQL = "SELECT * FROM transferenciastieneproductos WHERE idtransferencia='"+id+"' ORDER BY ptc ASC"
        resultado = consultasBD.ordenCrudaDict(consultaSQL)
        self.grid2.AppendRows(1)
        fila = 0
        for i,item in enumerate(resultado):
            datos = self.obtenerProducto(str(item['ptc']),str(item['cant']))
            self.grid2.SetCellValue(fila,0,datos['ptc'])
            self.grid2.SetCellValue(fila,1,datos['codsussan'])
            self.grid2.SetCellValue(fila,2,datos['descri'])
            self.grid2.SetCellValue(fila,3,datos['talle'])
            self.grid2.SetCellValue(fila,4,datos['color'])
            self.grid2.SetCellValue(fila,5,datos['precio'])
            self.grid2.SetCellAlignment(fila, 5, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid2.SetCellValue(fila,6,datos['cantidad'])
            self.grid2.SetCellAlignment(fila, 6, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid2.SetCellValue(fila,7,"0")
            self.grid2.SetCellAlignment(fila, 7, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid2.AppendRows(1)
            fila = fila + 1
        self.grid2.DeleteRows(fila)
        for col in xrange(self.grid2.GetNumberCols()):
            self.grid2.AutoSizeColumn(col,True)
        self.grid2.Refresh()

    def imprimir(self):
        print "Imprimir"
        fechaTransf = self.miFecha[-2:]+"-"+self.miFecha[5:7]+"-"+self.miFecha[0:4]
        nroTransf = self.grid1.GetCellValue(self.coloreado,0)
        sucOrigen = self.comboBox1.GetLabel()
        sucDestino = self.comboBox2.GetLabel()
        cantidad = self.grid1.GetCellValue(self.coloreado,3)
        nombre_vista = "Listado de transferencias entre sucursales"
        transferencia = [fechaTransf, nroTransf, sucOrigen, sucDestino, cantidad]
        columnas = ['P.T.C.','Codigo Sussan','Descripcion','Talle','Color','Precio','Cantidad']
        alineacion= [1,1,0,0,0,2,2]
        totalFil = self.grid2.GetNumberRows()
        
        matriz = []
        for i in xrange(totalFil):
            linea = []
            if self.grid2.GetCellValue(i,0) == '':
                continue
            linea.append(self.grid2.GetCellValue(i, 0)) #ptc
            linea.append(self.grid2.GetCellValue(i, 1)) #cod sussan
            linea.append(self.grid2.GetCellValue(i, 2)) #descripcion
            linea.append(self.grid2.GetCellValue(i, 3)) #talle
            linea.append(self.grid2.GetCellValue(i, 4)) #color
            linea.append(self.grid2.GetCellValue(i, 5)) #precio
            linea.append(self.grid2.GetCellValue(i, 6)) #cantidad
            matriz.append(linea)
                
        dlg = Vista.Vista(self, nombre_vista)
        dlg.reporte_html(matriz,columnas,alineacion,transferencia)

    def OnBotonLimpiar(self, event):
        if self.grid2.GetNumberRows() > 0:
            self.OnSeleccionarRenglon(None)
        if self.grid1.GetNumberRows() > 0:
            self.limpiarGrilla1()
        self.textCtrl1.SetValue("")
        self.staticText1.Show(True)
        self.datePickerCtrl1.Show(True)

    def buscarPorCodigo(self):
        print "Buscando por codigo"
        self.limpiarGrilla1()
        self.limpiarGrilla2()
        consultaSQL = "SELECT * FROM transferencias WHERE id='"+self.textCtrl1.GetValue()+"' "
        resultado = consultasBD.ordenCrudaDict(consultaSQL)
        if resultado == ():
            texto = "ID Transferencia "+self.textCtrl1.GetValue()+" no existe.\nVerifique"
            utiles.mensaje(None,texto)
            self.textCtrl1.SetFocus()
            return
        transferencia = resultado[0]
        sucOrigen = self.comboBox1.GetItems()[int(transferencia['idsucorigen'])-1]
        sucDestino = self.comboBox2.GetItems()[int(transferencia['idsucdestino'])-1]
        self.comboBox1.SetLabel(sucOrigen)
        self.comboBox2.SetLabel(sucDestino)
        self.origen = sucOrigen
        self.destino = sucDestino
        self.OnComboOrigen(None)
        self.OnComboDestino(None)
        fecha = str(transferencia['fecha'])[0:10]
        self.miFecha = fecha[-2:]+"/"+fecha[5:7]+"/"+fecha[0:4]
        anio,mes,dia = fecha.split("-")
        miDateTime = wx.DateTimeFromDMY(int(dia),int(mes)-1,int(anio))
        self.datePickerCtrl1.SetValue(miDateTime)
        self.datePickerCtrl1.Refresh()
        #self.staticText1.Show(False)
        #self.datePickerCtrl1.Show(False)
        if resultado != ():
            self.llenarGrilla(resultado)

    def OnSeleccionarRenglon2(self, event):
        if self.grid2.GetCellValue(0, 0) != "":
            fil = self.grid2.GetGridCursorRow()
            col = self.grid2.GetGridCursorCol()
            if self.grid2.GetCellValue(fil, 0) != "":
                self.id2 = ""
                if self.grid2.GetCellBackgroundColour(fil,0) == VERDE:
                    #poner en blanco
                    #self.ponerColor2(self.coloreado2,BLANCO)
                    self.ponerColor2(fil,BLANCO)
                    self.coloreado2 = fil
                else:
                    #poner en verde
                    #self.ponerColor2(self.coloreado2,BLANCO)
                    self.ponerColor2(fil,VERDE)
                    self.coloreado2 = fil
                    self.id2 = self.grid2.GetCellValue(fil,0)
        self.textCtrl2.SetFocus()
        self.grid2.Refresh()

    def OnPTCkillFocus(self, event):
        self.button4.SetFocus()
        if self.textCtrl2.GetValue() == "":
            self.button2.SetFocus()

    def OnBotonIngreso(self, event):
##        for renglon in xrange(self.grid2.GetNumberRows()):
##            if self.textCtrl2.GetValue() == self.grid2.GetCellValue(renglon, 0):
##                #self.grid2.SetGridCursor(renglon,0)
##                #self.OnSeleccionarRenglon2(None)
##                if self.grid2.GetCellBackgroundColour(renglon,0) != VERDE:
##                    self.ponerColor2(renglon,VERDE)
##                    self.coloreado2 = renglon
##                else:
##                    self.ponerColor2(renglon,BLANCO)
##                    self.coloreado2 = renglon
        for renglon in xrange(self.grid2.GetNumberRows()):
            if self.textCtrl2.GetValue() == self.grid2.GetCellValue(renglon, 0):
                if self.grid2.GetCellBackgroundColour(renglon,8) != ROJO:
                    pass

        self.textCtrl2.SetValue("")
        self.textCtrl2.SetFocus()
        
        
        
        
        
